The preferred Operating System (OS) design for ease of porting across computer architectures is a Microkernel Operating System with its hardware specific portions isolated in a Hardware Abstraction Layer (HAL) set of modules. Porting to a new architecture then only requires replacing or modifying the HAL, and recompiling the remainder of the Operating System with a compiler targeted to the new architecture.
One problem that has slowed successful Microkernel Operating System porting is the testing of a new HAL. Testing is difficult for a number of reasons. First, there is an abstraction mismatch between User/Kernel interface requests and the corresponding Kernel/HAL interface requests. Often a single Kernel request will translate into an undeterministicly larger number of HAL interface commands. Secondly, some HAL requests have no direct Kernel request counterparts. The result has been slipshod and difficult HAL testing.